home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -in_the_mag- / workbench / sql / msql-2.0.10.1 / include / lite.h next >
Text File  |  1999-06-14  |  10KB  |  453 lines

  1. /*
  2. **      lite.h - 
  3. **
  4. **
  5. ** Copyright (c) 1996,97  Hughes Technologies Pty Ltd
  6. **
  7. ** Permission to use, copy, and distribute for non-commercial purposes,
  8. ** is hereby granted without fee, providing that the above copyright
  9. ** notice appear in all copies and that both the copyright notice and this
  10. ** permission notice appear in supporting documentation.
  11. **
  12. ** This software is provided "as is" without any expressed or implied warranty.
  13. **
  14. **
  15. */
  16.  
  17.  
  18. #include <sys/types.h>
  19. #include <common/portability.h>
  20.  
  21.  
  22.  
  23. typedef    u_char    *U_C_PTR;
  24.  
  25. #undef  YYSTYPE
  26. #define    YYSTYPE    U_C_PTR
  27.  
  28. #define    SYM_NAME_LEN    48
  29. #define    VAL_BUF_LEN    10
  30.  
  31. typedef struct code_s {
  32.     char    op;
  33.     char    *arg;
  34.     u_short    label;
  35.     short    type;
  36.     u_short    line;
  37.     char    file;
  38.     struct code_s *next,
  39.         *prev;
  40. } code_t;
  41.  
  42.  
  43.  
  44. typedef struct _sym {
  45.         char    name[SYM_NAME_LEN],
  46.         valBuf[VAL_BUF_LEN],
  47.                 *val;
  48.         short    type;
  49.     char    array,
  50.         usign;
  51.         int     length,
  52.         source;
  53.         struct _sym *next;
  54. } sym_t;
  55.  
  56.  
  57. typedef struct _funct {
  58.     char    *name;
  59.     code_t    *code;
  60.     sym_t    *params;
  61.     struct     _funct *next;
  62. } funct_t;
  63.  
  64.  
  65. typedef    struct array_s {
  66.     sym_t    *sym;
  67.     struct    array_s *next;
  68. } array_t;
  69.  
  70.  
  71.  
  72. typedef struct stack_s {
  73.     u_short    block;
  74.     short    type;
  75.     sym_t    *sym;
  76.     struct    stack_s *next;
  77. } sstack_t;
  78.  
  79.  
  80. typedef struct plist_s {
  81.         sym_t    *sym;
  82.         struct  plist_s *next;
  83. } plist_t;
  84.  
  85.  
  86. typedef struct efunct_s {
  87.         char    *name;
  88.         void    (*funct) ();
  89.     char    *functName;
  90.         int        numParams;
  91.         int     paramTypes[20];
  92. } efunct_t;
  93.  
  94.  
  95.  
  96. typedef struct fbucket_s {
  97.         efunct_t                *funct;
  98.         struct fbucket_s        *next;
  99. } fbucket_t;
  100.  
  101.  
  102. typedef struct lstack_s {
  103.     int    label;
  104.     struct    lstack_s    *next;
  105. } lstack_t;
  106.  
  107.  
  108. typedef struct type_s {
  109.     char    *name;
  110.     int    length;
  111.     int    (*pack)();
  112.     int    (*unpack)();
  113.     int    (*read)();
  114.     int    (*write)();
  115.     int    (*compare)();
  116.     int    (*math)();
  117.     int    (*check)();
  118. } type_t;
  119.  
  120.  
  121. typedef struct  fdtab_s { 
  122.         int     fd,
  123.                 type,
  124.                 mark,
  125.                 len;
  126.         char    buf[4096];
  127.         FILE    *fp; 
  128.         struct  fdtab_s *next;
  129. } fdtab_t;
  130.  
  131.  
  132. #if defined(_OS_OS2) || defined(_OS_WIN32)
  133. /*
  134. ** prototypes for callbacks
  135. */
  136. typedef void (*RUNERRORFN)( char*);
  137. typedef void (*PARSEERRORFN)( char*);
  138. typedef int  (*YYLEXFN)( void);
  139. typedef void (*YYERRORFN)( char*);
  140. typedef void (*CHECKCONTENTTYPEFN)( void);
  141.  
  142. /*
  143. ** define a structure for parameters
  144. */
  145. typedef struct _callback {
  146.    RUNERRORFN         runError;
  147.    PARSEERRORFN       parseError;
  148.    YYLEXFN            yylex;
  149.    YYERRORFN          yyerror;
  150.    int*               yylineno;
  151.    CHECKCONTENTTYPEFN checkContentType;
  152. } callback;
  153. #endif
  154.  
  155.  
  156. #define    OP_CALL        1
  157. #define OP_PUSH        2
  158. #define OP_CMP        3
  159. #define OP_JMP        4
  160. #define OP_JMP_FALSE    5
  161. #define OP_JMP_BACK    6
  162. #define OP_LABEL    7
  163. #define OP_STORE    8
  164. #define OP_A_STORE    9
  165. #define OP_DEREF    10
  166. #define OP_ALU        11
  167. #define OP_BLOCK_IN    12
  168. #define OP_BLOCK_OUT    13
  169. #define OP_EXIT        14
  170. #define OP_ECHO        15
  171. #define OP_CAST        16
  172. #define OP_COUNT    17
  173. #define OP_PUSHRET    18
  174. #define OP_RETURN    19
  175.  
  176. #define    OP_ADD        100
  177. #define OP_SUB        101
  178. #define OP_MUL        102
  179. #define OP_DIV        103
  180. #define OP_AND        105
  181. #define OP_OR        106
  182. #define OP_MOD        107
  183.  
  184. #define SCALAR        1
  185. #define ARRAY        2
  186. #define    VARIABLE    3
  187.  
  188. #define    TYPE_REAL    0
  189. #define    TYPE_INT    1
  190. #define    TYPE_CHAR    2
  191. #define    TYPE_UINT    3
  192.  
  193.  
  194. #define    P_REAL        0
  195. #define    P_INT        1
  196. #define    P_TEXT        2
  197. #define    P_UINT        3
  198. #define P_ARRAY        9
  199.  
  200.  
  201. #define    SRC_POST    1
  202. #define SRC_IMPORT    2
  203. #define SRC_GET        3
  204. #define SRC_SECURE    SRC_IMPORT
  205.  
  206. #define SYM_HASH_SIZE   128
  207.  
  208. #define FILE_NORMAL      1
  209. #define FILE_PIPE        2
  210. #define FILE_FIFO        3
  211.  
  212.  
  213. #define    LITE_BRK    ""
  214.  
  215. /*
  216. ** Pre declarations
  217. */
  218.  
  219. #if defined(__STDC__) || defined(__cplusplus)
  220. #  define __ANSI_PROTO(x)       x
  221. #else
  222. #  define __ANSI_PROTO(x)       ()
  223. #endif
  224.  
  225.  
  226. /* Lexer / Parser */
  227.  
  228. int    yyparse();
  229.  
  230. #if defined(_OS_UNIX)
  231. int    yylex();
  232. void    yyerror __ANSI_PROTO((char *));
  233. void    parseError __ANSI_PROTO((char *));
  234. void    runError __ANSI_PROTO((char *));
  235. #endif
  236.  
  237. void     lexInitScanner __ANSI_PROTO((u_char *));
  238. void     sendFooter ();
  239.  
  240.  
  241. /* Symbol table routines */
  242.  
  243. int symCheckSymbol __ANSI_PROTO((char *));
  244. int symGetNumArrayElements __ANSI_PROTO((sym_t *));
  245. int symSetArray __ANSI_PROTO((char *, sym_t *));
  246.  
  247. char *expandText __ANSI_PROTO((char *, int));
  248. char *symUnpackSymbol __ANSI_PROTO((sym_t *));
  249.  
  250. sym_t *createArray();
  251. sym_t *createArrayLiteral();
  252. sym_t *createCharSymbol __ANSI_PROTO((char *));
  253. sym_t *createIntSymbol __ANSI_PROTO((int));
  254. sym_t *createRealSymbol __ANSI_PROTO((double));
  255. sym_t *createUintSymbol __ANSI_PROTO((int));
  256. sym_t *symCreateLiteral __ANSI_PROTO((char *, int));
  257. sym_t *symCreateMacroLiteral __ANSI_PROTO((char *));
  258. sym_t *symCreateSymbol __ANSI_PROTO((char *, int, int));
  259. sym_t *symGetArrayElement __ANSI_PROTO((sym_t *, int));
  260. sym_t *symGetEnvironVariable __ANSI_PROTO((char *));
  261. sym_t *symGetMacro __ANSI_PROTO((char *));
  262. sym_t *symGetSymbol __ANSI_PROTO((char *));
  263. sym_t *symdup __ANSI_PROTO((sym_t *));
  264.  
  265. void initSymbolTables();
  266. void symAddArrayElement __ANSI_PROTO((char *));
  267. void symClearArray __ANSI_PROTO((sym_t *));
  268. void symCreateArrayGlobal __ANSI_PROTO((char *,char **,int));
  269. void symCreateCharGlobal __ANSI_PROTO((char *,char *));
  270. void symCreateCharMacro __ANSI_PROTO((char *,char *));
  271. void symCreateIntGlobal __ANSI_PROTO((char *,int));
  272. void symCreateIntMacro __ANSI_PROTO((char *,int));
  273. void symCreateRealGlobal __ANSI_PROTO((char *,double));
  274. void symCreateRealMacro __ANSI_PROTO((char *,double));
  275. void symFreeSymbol __ANSI_PROTO((sym_t *));
  276. void symFreeSymbolData __ANSI_PROTO((sym_t *));
  277. void symSetArrayElement __ANSI_PROTO((sym_t *, int, sym_t *));
  278. void symSetValue __ANSI_PROTO((sym_t *, sym_t *));
  279. void symStackIn();
  280. void symStackOut();
  281. void symStoreSymbol __ANSI_PROTO((sym_t **, sym_t *));
  282. void symTypeCast __ANSI_PROTO((sym_t *,int));
  283.  
  284. array_t *symArrayDup __ANSI_PROTO((sym_t *));
  285.  
  286.  
  287. /* Code generation routines */
  288.  
  289. int     addFunction __ANSI_PROTO((char *));
  290. int     addParam __ANSI_PROTO((char *, char *));
  291. int     codePopBreak();
  292. int     codePopContinue();
  293. int     codePopLabel();
  294. int     popBreak ();
  295. int     popContinue ();
  296. int     popLabel ();
  297.  
  298. void     codeALU __ANSI_PROTO((int));
  299. void     codeArrayStore __ANSI_PROTO((char *));
  300. void     codeBlockIn();
  301. void     codeBlockOut();
  302. void     codeCall __ANSI_PROTO((char *));
  303. void     codeCast __ANSI_PROTO((char *));
  304. void     codeCmp __ANSI_PROTO((int));
  305. void     codeCount();
  306. void     codeDeref __ANSI_PROTO((char *));
  307. void     codeEcho __ANSI_PROTO((char *));
  308. void     codeExit ();
  309. void     codeHtml __ANSI_PROTO((int, int));
  310. void     codeJmp __ANSI_PROTO((int));
  311. void     codeJmpBack __ANSI_PROTO((int));
  312. void     codeJmpFalse __ANSI_PROTO((int));
  313. void     codeLabel __ANSI_PROTO((int));
  314. void     codePush __ANSI_PROTO((char *));
  315. void     codePushBreak __ANSI_PROTO((int));
  316. void     codePushContinue __ANSI_PROTO((int));
  317. void     codePushLabel __ANSI_PROTO((int));
  318. void     codePushRet();
  319. void     codeReturn();
  320. void     codeStore __ANSI_PROTO((char *));
  321. void     dumpCode ();
  322. void     endOfFunction();
  323. void     pushBreak __ANSI_PROTO((int));
  324. void     pushContinue __ANSI_PROTO((int));
  325. void     pushLabel __ANSI_PROTO((int));
  326.  
  327.  
  328. /* Code simulation routines */
  329.  
  330. int    checkNumeric __ANSI_PROTO((char *));
  331. int    getLine();
  332. int    runCode __ANSI_PROTO((char *));
  333. int     simGetLineNum();
  334.  
  335. char *simGetFileName();
  336.  
  337. void    doExit();
  338. void    doBlockIn();
  339. void    doBlockOut();
  340. void    doCall __ANSI_PROTO((code_t *));
  341. void    doEcho __ANSI_PROTO((plist_t *));
  342. void    doPushVar __ANSI_PROTO((code_t *));
  343. void    doPushVal __ANSI_PROTO((code_t *));
  344. void    doPushLiteral __ANSI_PROTO((code_t *));
  345. void    doStore __ANSI_PROTO((code_t *));
  346. void    doArrayStore __ANSI_PROTO((code_t *));
  347. void    doDeref __ANSI_PROTO((code_t *));
  348. void    doALU __ANSI_PROTO((code_t *));
  349. void    doCmp __ANSI_PROTO((code_t *));
  350.  
  351.  
  352.  
  353. /* External interface routines */
  354.  
  355. int    calcHash __ANSI_PROTO((char *));
  356. int    getNumArrayElements __ANSI_PROTO((array_t *));
  357. int     hex2dec __ANSI_PROTO((char *));
  358. int     APIENTRY modLoadModule __ANSI_PROTO((char *));
  359. int     APIENTRY modLoadModuleFunctions __ANSI_PROTO((void *, efunct_t *));
  360.  
  361. #if defined(_OS_OS2) || defined(_OS_WIN32)
  362. int     APIENTRY modLoadModuleCallbacks __ANSI_PROTO((callback *));
  363. void    APIENTRY modCheckContentType( void);
  364. void    APIENTRY modRunError __ANSI_PROTO(( char* er));
  365. #endif
  366.  
  367. int     oct2dec __ANSI_PROTO((char *));
  368. int    str2int __ANSI_PROTO((char *));
  369.  
  370. char    *deleteObject __ANSI_PROTO((u_int));
  371. char    *fetchObject __ANSI_PROTO((u_int));
  372. char    *getArrayElement __ANSI_PROTO((array_t *, int));
  373. char    *int2str __ANSI_PROTO((int));
  374.  
  375. void    addExterns __ANSI_PROTO((efunct_t *));
  376. void    setReturnValue __ANSI_PROTO((char *, int));
  377. void    setupModules ();
  378.  
  379. sym_t     *createArray();
  380.  
  381. u_int    storeObject __ANSI_PROTO((char *));
  382.  
  383. efunct_t *findExtern __ANSI_PROTO((char *));
  384.  
  385.  
  386. /* Type handling routines */
  387.  
  388. type_t     *typeGetType __ANSI_PROTO((int));
  389. int     typeGetTypeIndex __ANSI_PROTO((char *));
  390.  
  391. sym_t    *createIntSymbol __ANSI_PROTO((int));
  392. sym_t    *createRealSymbol __ANSI_PROTO((double));
  393. sym_t    *createCharSymbol __ANSI_PROTO((char *));
  394.  
  395.  
  396.  
  397. /* lib.c prototypes */
  398. int libLoadLibrary __ANSI_PROTO((char *));
  399. int libWriteLibrary __ANSI_PROTO((char *));
  400.  
  401.  
  402. /* Misc */
  403.  
  404. #if defined(_OS_UNIX)
  405. void checkContentType();
  406. #endif
  407.  
  408. void initStandardModule();
  409. void initMsqlModule();
  410. void initModules();
  411. void setError();
  412. int typeDetermineType __ANSI_PROTO((char*));
  413.  
  414.  
  415. /*
  416. ** Inline definitions
  417. */
  418.  
  419. /* inlined, unaligned, 4-byte copy */
  420. #define bcopy4(s,d) \
  421.       ((((unsigned char *)d)[0] = ((unsigned char *)s)[0]), \
  422.        (((unsigned char *)d)[1] = ((unsigned char *)s)[1]), \
  423.        (((unsigned char *)d)[2] = ((unsigned char *)s)[2]), \
  424.        (((unsigned char *)d)[3] = ((unsigned char *)s)[3]))
  425. /* inlined, unaligned, 8-byte copy */
  426. #define bcopy8(s,d) \
  427.       ((((unsigned char *)d)[0] = ((unsigned char *)s)[0]), \
  428.        (((unsigned char *)d)[1] = ((unsigned char *)s)[1]), \
  429.        (((unsigned char *)d)[2] = ((unsigned char *)s)[2]), \
  430.        (((unsigned char *)d)[3] = ((unsigned char *)s)[3]), \
  431.        (((unsigned char *)d)[4] = ((unsigned char *)s)[4]), \
  432.        (((unsigned char *)d)[5] = ((unsigned char *)s)[5]), \
  433.        (((unsigned char *)d)[6] = ((unsigned char *)s)[6]), \
  434.        (((unsigned char *)d)[7] = ((unsigned char *)s)[7]))
  435.  
  436.  
  437.  
  438. /*
  439. ** Macros for matching character classes.  These are in addition to
  440. ** those provided in <ctypes.h>
  441. */
  442.  
  443. #ifdef  iswhite
  444. # undef iswhite
  445. #endif
  446. #define iswhite(c)      (c == ' ' || c == '\t' || c == '\n')
  447.  
  448. #ifdef  iscompop
  449. # undef iscompop
  450. #endif
  451. #define iscompop(c)     (c == '<' || c == '>' || c == '=')
  452.  
  453.